Option Explicit

'################################################################
' Discriptor
' Set接口
'################################################################

'################################################################
' Property
'################################################################
' 获取 set 内元素的数量
Public Property Get Count() As Long
End Property

'################################################################
' Function
'################################################################
' 按照索引来获取 set 内元素的数量
' 索引从 0 开始
Public Function Item(ByRef index as Variant) As Variant
End Function

' 向 set 内添加元素。不会重复添加
Public Sub Add(ByRef val As Variant)
End Sub

' 检查 set 内是否存在指定元素
Public Function Exists(ByRef val As Variant) As Boolean
End Function

' 从 set 内获取包含所有元素的数组
Public Function Items() As Variant()
End Function

' 删除 set 内的指定元素
Public Sub Remove(ByRef val As Variant)
End Sub

' 删除 set 内的所有元素
Public Sub Clear()
End Sub

' 克隆一个set
Public Function Clone() As ISet
End Function

' 将数组的每个元素添加到 set 中
' @param arr 数组
Public Sub AddArray(ByRef arr As Variant)
End Sub

' 使用指定的分隔符，连接 set 内的所有元素
' 如果某个元素是一个 Object 类型的对象，无法生成字符串，只会为这个对象写入一个空格
' @param delimiter 分隔符
Public Function Join(ByRef delimiter As String) As String
End Function

' 合并另一个 Set
' @param s 另一个 Set. 如果 s 和当前 Set 相同，将会立刻结束
Public Sub MergeSet(ByRef s As ISet)
End Sub

' 从当前 set 中删除和另一个 Set 中相同的元素
' @param s 另一个 Set. 如果 s 和当前 Set 相同，将会直接清空当前 Set
Public Sub RemoveSet(ByRef s As ISet)
End Sub

' ==================================
' 处理数组引用
' ==================================
' 合并 IObjArrayRef 对象中的所有元素
Public Sub mergeObjArrayRef(ByRef arr As IObjArrayRef)
End Sub

' 合并 IPrimitiveArrayRef 对象中的所有元素
Public Sub mergePrimitiveArrayRef(ByRef arr As IPrimitiveArrayRef)
End Sub

' 将 set 内的所有元素，保存到一个对象类型的数组引用中
Public Function toObjArrayRef() As IObjArrayRef
End Function

' 将 set 内的所有元素，保存到一个基础数据类型的数组引用中
Public Function toPrimitiveArrayRef() As IPrimitiveArrayRef
End Function
